about func
有了變數、有了保留字之後,我們需要 方法/function/method/函式/func,可以讓程式的結構更整潔、減少重複性 ... 之類的功能
在剛開始寫 go 時,我們大部分的程式碼都是放在主函式 func main() 中
package main
func main() {
//mission 1
//mission 2
//mission 3
.
.
.
END
}
隨著程式碼規模提升,這樣寫法漸漸不敷使用
一個 func 動輒上百行,假設有 20 個 func 就要兩千行,程式碼上下捲動不易維護,也無法將程式碼分離在不同檔案中。
用寫函式 (function) 的方式來分離程式碼,函式是程式碼共用的基礎。物件導向的方法 (method) 是以函式為基礎。
之前在聊變數時,就已經使用過一些函式了,像是在 fmt 套件的 Println 函式,可在 terminal 中印出文字。
Public vs private
依宣告規則, Go 的公開函式都是以大寫開頭,這是 Go 語言的一項設計
只有字母大寫的函式或方法才會公開給外界使用。
來寫一個簡單的 hello func,並且呼叫三次:
package main
import (
"fmt"
)
func helloGo() {
fmt.Println("Hello ironman2021")
}
func main() {
helloGo()
helloGo()
helloGo()
}
雖然這個函式非常簡單,但可以知道,函式可以『重覆再利用』的。
parameter
函式可以加入參數 (parameter),透過參數來改變函式的行為
package main
import (
"fmt"
)
func hello(name string) {
fmt.Println(fmt.Sprintf("Hello %s", name))
}
func main() {
hello("Eric")
hello("William")
hello("Amy")
}
輸出為
Hello Eric
Hello William
Hello Amy
return
函式運作後,可以回傳值到外層 (return value)
package main
import (
"log"
"math"
)
func add(a float64, b float64) float64 {
return a + b
}
func main() {
x := add(0.3, 0.4)
fmt.Println(x)
}
x 為 add() 方法 return 的計算結果
x declared but not used
多值回傳
Go 函式允許多個回傳值,如以下實例:
package main
import (
"log"
)
func addsub(a int, b int) (int, int) {
return a + b, a - b
}
func main() {
m, n := addsub(5, 3)
fmt.Println("m =", m, "n =", n)
}
輸出為
m = 8 n = 2
多回傳值時常用於錯誤處理 (error handling) 中,比方說...call API 失敗, 寫入 DB 失敗, parseInt 失敗...等 各種失敗
錯誤處理在 golang 中是很重要的一環,避免 panic 避免服務死掉,是我們的最高原則